package com.shanyin.framework.common.util;

import java.util.Random;

/***
 ** @category 邀请码生成工具...
 ** @author qing.yunhui
 ** @email: 280672161@qq.com
 ** @createTime: 2018年5月24日下午2:03:30
 **/
public class InviteCodeUtil {
	
	/** 自定义进制(0,1没有加入,容易与o,l混淆) */
    private static final char[] definitionChars=new char[]{'q', 'w', 'e', '8', 'a', 's', '2', 'd', 'z', 'x', '9', 'c', '7', 'p', '5', 'i', 'k', '3', 'm', 'j', 'u', 'f', 'r', '4', 'v', 'y', 'l', 't', 'n', '6', 'b', 'g', 'h'};
 
    /** (不能与自定义进制有重复) */
    private static final char uniqueChar='o';
 
    /** 字符长度 */
    private static final int charLen=definitionChars.length;
 
    /**
     * <p>生成六位随机码(重复机率还是存在的需要去数据库扫描)</p>
     * @param length 生成序列的长度
     * @return 随机码
     */
    public static String genInviteCode(int length) {
        char[] buf=new char[32];
        int charPos=32;
        buf[--charPos]=definitionChars[(int)(new Random().nextInt(charLen))];
        String str=new String(buf, charPos, (32 - charPos));
        // 不够长度的自动随机补全
        if(str.length() < length) {
            StringBuilder sb=new StringBuilder();
            sb.append(uniqueChar);
            Random rnd=new Random();
            for(int i=1; i < length - str.length(); i++) {
            	sb.append(definitionChars[rnd.nextInt(charLen)]);
            }
            str+=sb.toString();
        }
        return str;
    }

}
